//通用函数库
define(['vue','axios','ELEMENT',],function(vue,axios,ELEMENT){
  vue.prototype.$http = axios;
  //总线
  vue.prototype.$bus = new vue();
  //一次性载入所有的element组件。
  vue.use(ELEMENT);

  //跳转时间
  vue.prototype.redirectTime = 2000;
  //将this.$message改造成parent.showMsg,使得调用方式和this.$message一致
  try{
    if(window.top != window && window.top.showMsg) {
      vue.prototype.redirectTime = 200;
      vue.prototype.$message = (text,status ,time)=>{
        var p = window.parent;
        if(!time || time == undefined){
          time = 5000;
        }
        window.top.showMsg(text,status,time);
      }

      //消息
      vue.prototype.$notify = {
        success: function(param){
          window.top.showMsg(param.message,'success',param.time);
        },
        error:function(param){
          window.top.showMsg(param.message,'error',param.time);
        },
        warning:function(param){
          window.top.showMsg(param.message,'warning',param.time);
        }
      }
    }
  }catch(err){
    console.log('window.top:' ,err);
  }

  return {

    //所有自定义组件，需要在这里进行预声明，否则使用会有问题
    //已经改成使用eval进行动态载入了,这里不需要进行声明了
    // userComponents:{
    //   //直接载入js文件
    //   // 'comp-card' : resolve=>require(['Jichu/TestAsync/Components/comp-card'], resolve),
    //   // 'comp-text' : resolve=>require(['Jichu/TestAsync/Components/comp-text'], resolve),

    //   //载入vue格式文件
    //   'comp-card' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-card'], resolve),
    //   'comp-text' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-text'], resolve),
    //   'comp-select' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-select'], resolve),
    //   'comp-image' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-image'], resolve),
    //   'comp-image-phone' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-image-phone'], resolve),
    //   'comp-image-phone-pull' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-image-phone-pull'], resolve),
    //   'comp-file' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-file'], resolve),
    //   'comp-calendar' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-calendar'], resolve),
    //   'comp-checkbox' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-checkbox'], resolve),
    //   'comp-checkbox-group' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-checkbox-group'], resolve),
    //   'comp-autocomplete' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-autocomplete'], resolve),
    //   'comp-popup-select' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-popup-select'], resolve),
    //   'comp-popup-multi-select' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-popup-multi-select'], resolve),

    //   //扩展和组合测试
    //   // 'comp-text-extend' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-text-extend'], resolve),
    //   // 'comp-text-compose' : resolve=>require(['_vue!Jichu/TestAsync/Components/comp-text-compose'], resolve),
    // },
    //判断文件是否存在,
    //注意jquery方法不能使用，会导致报错
    isFileExist : function(url) {
      if(url.length==0){
        return false;
      }
      var isExist=true;
      $.ajax(url, {
        type: 'get',
        async:false,//取消ajax的异步实现
        timeout: 1000,
        success: function() {
        },
        error: function() {
          isExist = false;  
        }
      });
      return isExist;
    },
    //判断文件是否存在,常规方法
    isExistFile : function(filepath){
      var xmlhttp;
      if (window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
      }else{
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      try {
        xmlhttp.open("GET",filepath,false);
        xmlhttp.send();
        if(xmlhttp.readyState==4){
            if(xmlhttp.status==200) return true; //url存在
            else if(xmlhttp.status==404) return false; //url不存在
            else return false;//其他状态
        }
      } catch(e) {
        debugger;
      }

    },

    //根据controller和action设置sontpl
    //fnHook 为载入完成后需要执行的函数
    setSontpl : function(config,fnHook) {
      if(config.sonTpl) {
        //不支持数组
        // dump(typeof(config.sonTpl));
        if(Array.isArray(config.sonTpl)) {
          console.error('sonTpl不能为数组!');
          return;
        }
        //如果sonTpl以.js结尾,会将.html文件作为当前路径,不考虑baseurl,所以需要去掉
        var len =config.sonTpl.length;
        if(config.sonTpl.substr(len-3,3)=='.js') {
          config.sonTpl = config.sonTpl.substr(0,len-3)
          var _this = this;
          require([_tplPath_+'/'+config.sonTpl],function(ev){
            //如果ev是以vue配置文件的书写，直接返回vue;
            _this.callbacks = ev;

            //载入后立即执行钩子
            if(fnHook) fnHook();

            if(ev && ev.main) {
              ev.main.apply(_this);
            }
          },function(err){
            // console.log(varTemplate.sonTpl +'.js not exists')
          });
        }
        return;
      }
      //根据controller和action得到url
      // var temp = config.controller.split('_');
      // config.sonTpl = `${temp[0]}/${temp[1]}/${config.action}`;
      //如果sontpl文件不存在，则设置为空，表示不需要加载
      // if(!this.isExistFile(baseUrl + '/' + config.sonTpl+".js")) {
      //   config.sonTpl = '';
      // }
    },

    //setSontpl 老函数，
    //_popupIframe.js中还需要用到，后期对sonTpl改造后可舍弃
    setSontplOld : function(config) {
      if(config.sonTpl) {
        //如果sonTpl以.js结尾,会将.html文件作为当前路径,不考虑baseurl,所以需要去掉
        var len =config.sonTpl.length;
        if(config.sonTpl.substr(len-3,3)=='.js') {
          config.sonTpl = config.sonTpl.substr(0,len-3)
        }
        return;
      }
      //根据controller和action得到url
      var temp = config.controller.split('_');
      config.sonTpl = `${temp[0]}/${temp[1]}/${config.action}`;
      //如果sontpl文件不存在，则设置为空，表示不需要加载
      // if(!this.isExistFile(baseUrl + '/' + config.sonTpl+".js")) {
      //   config.sonTpl = '';
      // }
    },

    //判断某个对象是否存在某个属性
    isset : function(obj,propName) {
      if(obj===null) return false;
      if(typeof(obj)!="object") return false;
      return obj.hasOwnProperty(propName);
    },

    //得到当前日期
    getDate() {
      var date = new Date();
      var seperator1 = "-";
      var year = date.getFullYear();
      var month = date.getMonth() + 1;
      var strDate = date.getDate();
      if (month >= 1 && month <= 9) {
          month = "0" + month;
      }
      if (strDate >= 0 && strDate <= 9) {
          strDate = "0" + strDate;
      }
      var currentdate = year + seperator1 + month + seperator1 + strDate;
      return currentdate;
    },

    //判断是否为空
    isEmpty(val) {
      if(!val) return true;
      if(Array.isArray(val) && val.length==0) return true;
      if(!Array.isArray(val) && typeof(val)=='object' && !val.value) return true;
      return false;
      // if()
    }
  }
});